package com.集合.Map集合.案例;
/*案例：统计字符串中每个字符出现的次数
需求：键盘录入一个字符串，要求统计字符串中每个字符串出现的次数。
举例：键盘录入“aababcabcdabcde" 在控制台输出：“a(5)b(4)c(3)d(2)e(1)”

分析：
1.我们可以把结果分成几个部分来看：a(5)，b(4)，c(3)，d(2),e(1)
2.每一个部分可以看成是：字符和字符对应的次数组成
3.这样的数据，我们可以通过HashMap集合来存储，键是字符，值是字符出现的次数
注意：键是字符，类型应该是Character；值是字符出现的次数，类型应该是Integer

思路：
1.键盘录入一个字符串
2.创建HashMap集合，键是Character，值是Integer
3.遍历字符串，得到每一个字符
4.拿得到的每一个字符作为键到HashMap集合中去找对应的值，看其返回值
    返回值是null：说明该字符在HashMap集合中不存在，就把该字符作为键，1作为值存储。
    返回值不是null：说明该字符在HashMap集合中存在，把该值加1，然后重新存储该字符和对应的值。
5.遍历HashMap集合，得到键和值，按照要求进行拼接
6.输出结果*/

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class RecordingString {
    public static void main(String[] args) {
        //        1.键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        //        2.创建HashMap集合，键是Character，值是Integer
//        HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
        TreeMap<Character, Integer> hm = new TreeMap<Character, Integer>();
        //        3.遍历字符串，得到每一个字符
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
//        4.拿得到的每一个字符作为键到HashMap集合中去找对应的值，看其返回值
            Integer value = hm.get(c);
//        返回值是null：说明该字符在HashMap集合中不存在，就把该字符作为键，1作为值存储。
            if (value == null) {
                hm.put(c, 1);
            }
//        返回值不是null：说明该字符在HashMap集合中存在，把该值加1，然后重新存储该字符和对应的值。
            else {
                value++;
                hm.put(c, value);//HashMap集合键相同,值不同,后来的元素会把之前的元素覆盖
            }
        }
        //        5.遍历HashMap集合，得到键和值，按照要求进行拼接
        StringBuilder sb = new StringBuilder();

        Set<Character> set = hm.keySet();
        for (Character c : set) {
            Integer i = hm.get(c);
            sb.append(c).append("(").append(i).append(")");
        }
        String result = sb.toString();
//        6.输出结果
        System.out.println(result);
    }
}

/*字符串拼接
* StringBuilder sb = new StringBuilder();
* sb.append().append().......;
* String result = sb.toString()*/

/*一个改进
* 把集合类型由HashMap换为TreeMap，得到的结果是自然排序*/